// JavaScript Document
//对象K->系统的基础对象信息
((function(q){
	
	/****************************************************/
	/*********** 一个简单的异常输出      *******************/
	/****************************************************/
	debuger = function(msg){
		console.warn(msg);
	}
	
	/****************************************************/
	/*********** 一个简单的数据收集器项      ****************/
	/****************************************************/
	KuoqiDataerItem = function(opts){
		opts = $Q.optionsInput(opts,{
			type:'text',
			name:'name',
			node : null,
		});
		this.type = opts.type;
		this.name = opts.name;
		this.node = opts.node;
		//冲刷一个值进入到这个节点
		this.flush = function(val){
			if(this.type=='text'){
				this.node.innerHTML = val;
			}else if(this.type=='value'){
				this.node.value = val;
			}else if(this.type=='src'){
				this.node.src = val;	
			}else if(this.type=='formval'){
				//关于表单的常规信息写入
				if(this.node.type=='select-one'){
					var ele = $Q(this.node).find('option[value="'+val+'"]');
					ele.siblings().removeAttr('selected');
					ele.prop('selected','selected');
				}else{
					debuger('暂不支持输入[formval]的值【'+this.name+':'+val+'】');		
				}
				console.log(this);
			}else{
				debuger('暂不支持输入的值【'+this.name+':'+val+'】');	
			}
		}
	}
	
	/****************************************************/
	/*********** 一个简单的数据收集器    *******************/
	/****************************************************/
	KuoqiDataer = function(opts){
		opts = $Q.optionsInput(opts,{
			data:{},//页面数据的数据区域
			dataer:{},//数据区域收集器
		},'element');
		this.data = opts.data;
		this.dataer = opts.dataer;
		//将一个数据器写入到列表中
		this.addItem = function(name,node,type){
			var dataerItem = new KuoqiDataerItem({
				type:type,
				name:name,
				node:node,
			});
			this.dataer[name] = dataerItem;
		}
		//设置一个Item的内容
		this.setItem = function(name,value){
			//获取一个项
			var itm = this.dataer[name];
			itm&&itm.flush(value);
		}
		
		//设置一个值
		this.setData = function(name,value){ return this.data[name] = value;}
		
		//获取一个值
		this.getData = function(name){ return this.data[name]}
		
		//获取所有的数据信息
		this.getAll = function(){ return this.data;}
		//设置数据器的内容信息
		this.setDataer = function(code,stream){
			this.setItem(code,stream);
		}
	}
	
	/****************************************************/
	/*********** 一个简单的页面对象      *******************/
	/****************************************************/
	//每个页面会拥有一个特定的路由信息
	//每个页面会拥有一个特定的标题
	//每个页面会拥有一个特定的数据对象
	//每个页面
	KuoqiPage = function(opts){
		//没有输入信息的时候，将自动获取低昂前页面进行页面处理
		opts = $Q.optionsInput(opts,{
			route:'',//页面的路由信息，将提示在路由信息列表中
			title:'',//页面的标题信息
			element:$Q('body'),	//页面的原始元素区域
			data:{},//页面数据的数据区域
		},'element');
		this.element = $Q(opts.element).first(true);
		this.title = opts.title;
		this.route = opts.route;
		this.data = new KuoqiDataer({ data:opts.data});
		this.setData = function(name,value){ return this.data.setData(name,value);}//设置一个数据
		this.getData = function(name){ return this.data.getData(name);};//获取一个数据
		//当前页面的基础信息初始化
		this.__initialize = function(){
			var ths = this;
			//收集当前页面的所有可能的值，写入到数据器中
			//你别说，这个其实挺快的呢
			function exportDataer(element){
				element.childNodes.forEach(function(e,i){
					if(e.hasAttribute){
						if(e.hasAttribute('kapp-text')){
							var name = e.getAttribute('kapp-text');
							ths.data.addItem(name,e,'text');
						}else if(e.hasAttribute('kapp-value')){
							var name = e.getAttribute('kapp-value');
							ths.data.addItem(name,e,'value');
						}else if(e.hasAttribute('kapp-src')){
							var name = e.getAttribute('kapp-src');
							ths.data.addItem(name,e,'src');
						}else if(e.hasAttribute('kapp-formval')){
							var name = e.getAttribute('kapp-formval');
							ths.data.addItem(name,e,'formval');
						}else{
							//debuger('其他的数据类型，暂不支持');
						}
						exportDataer(e);
					}
				});
			}
			exportDataer(this.element);
				
		}
		
		
		//页面数据的渲染方法
		this.render = function(){
			var data = this.data.getAll();
			for(var i in data){
				this.data.setDataer(i,data[i]);
			}
		};
		
		this.__initialize();
	}
	
	
	/****************************************************/
	/***********     对外主对象信息     *******************/
	/****************************************************/
	//app-constructor
	//包含所有页面的一个页面列表
	KuoqiApp = function(){
		
		//关于页面部分的对象信息
		//这个方法提供新建一个页面的概念，
		
		this.page = KuoqiPage;
		
		
		//初始化执行方法
		this.ready = function(func){
			this._callback = func;
			if(!this._callback){
				debuger('请填写Kapp.ready(func)中的func内容信息，以使用本系统');
			}
			this._callback();
		}
		
		//系统初始化的执行方法
		this.__initialize = function(){
			//尝试自动将body内容收集到page中
		}
		
		this.__initialize();	
	}
	
	
	
	
	
	
	/****************************************************/
	/***********     内部主对象信息     *******************/
	/****************************************************/
	//系统基础对象信息，Kapp的基础对象就是这个了
	k = {
		
		
		//这里初始化系统k
		//初始化完成之后出示下对象KuoqiApp
		__initialize : function(){
			//使用body隐藏功能
			return new KuoqiApp();
		},
		
		//主入口引入信息
		index:function(){
			return k.__initialize();
		},
	}
	
	//初始化的部分
	//用于将系统内容输出到页面显示中去的操作
	q.Kapp = k.index();
})(this));